package com.dormitoryAdministratorSystem.util;

import java.sql.*;

public class DBUtil2 {
    /**
     * 驱动
     */
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    /**
     * 数据的url地址
     */
    private static final String URL ="jdbc:mysql://localhost:3306/dormitory_management?useSSL=false&serverTimezone=Asia/Shanghai";
    /**
     * 用户名
     */
    private static final String USERNAME = "root";
    /**
     * 密码
     */
    private static final String PWD = "root";
    /**
     * 连接对象
     */
    private static Connection connection = null;
    /**
     * 预编译sql语句的对象
     */
    private static PreparedStatement preparedStatement=null;
    /**
     * 结果集
     */
    private static ResultSet resultSet =null;

    private DBUtil2(){

    }

    /**
     * 获得连接
     */
    public  static Connection  getConnection(){

        try {
            Class.forName(DRIVER);
            connection  = DriverManager.getConnection(URL,USERNAME,PWD);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return connection;
    }

    /**
     * 关闭连接
     */
    public static void close(){
        if(resultSet!=null){

            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(preparedStatement!=null){
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(connection!=null){

            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     *
     * @param sql  要执行的增删改
     * @param parms object类型的参数的数组
     * @return 影响数的行数  1 成功 0 失败
     */
    public static int executeUpdate(String sql,Object...parms){

        int  result=0;
        try {
//            System.out.println(connection+"====>>工具类");
            //开启一个事务
            connection.setAutoCommit(false);
            //获得预编译sql执行的对象
            preparedStatement = connection.prepareStatement(sql);
            //判断有参数列表
            if(parms!=null){
                //便利参数数组 被设置占位符
                for (int i = 0; i < parms.length; i++) {
                    preparedStatement.setObject((i+1),parms[i]);
                }
            }
            //执行sql语句
            result=  preparedStatement.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }

        return result;
    }


    /**
     *  查询方法
     * @param sql  执行的查询语句
     * @param prams 设置占位符参数
     * @return 结果集
     */
    public  static ResultSet executeQuery(String sql,Object...prams){
        //获得连接
        try {
            getConnection();
            //编译sql语句
            preparedStatement = connection.prepareStatement(sql);
            if(prams!=null){
                for (int i = 0; i < prams.length; i++) {
                    preparedStatement.setObject((i+1),prams[i]);
                }
            }
            //执行sql语句
            resultSet =    preparedStatement.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return resultSet;
    }


}
